package main.leetcode.clockin.Auguest;

/**
 * 459. 重复的子字符串
 *
 * <p>给定一个非空的字符串，判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母，并且长度不超过10000。
 *
 * <p>示例 1: 输入: "abab" 输出: True 解释: 可由子字符串 "ab" 重复两次构成。
 *
 * <p>示例 2: 输入: "aba" 输出: False
 *
 * <p>示例 3: 输入: "abcabcabcabc" 输出: True 解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)
 */
public class day24 {
    public static void main(String[] args) {}

    //    /** 构造必然存在的循环节 */
    //    public boolean repeatedSubstringPattern(String s) {
    //        return (s + s).indexOf(s, 1) != s.length();
    //    }

    /** 枚举 */
    public boolean repeatedSubstringPattern(String s) {
        if (s == null) {
            return false;
        }
        int n = s.length();
        for (int i = 1; 2 * i <= n; i++) {
            if (n % i == 0) {
                boolean match = true;
                // 以j为中心进行匹配
                for (int j = i; j < n; j++) {
                    if (s.charAt(j) != s.charAt(j - i)) {
                        match = false;
                        break;
                    }
                }
                if (match) {
                    return true;
                }
            }
        }
        return false;
    }
}
